label: Try to avoid a pango_layout_get_extents call
authorTimm Bäder <mail@baedert.org>
Sat, 15 Aug 2020 15:03:46 +0000 (17:03 +0200)
committerMatthias Clasen <mclasen@redhat.com>
Wed, 19 Aug 2020 20:14:59 +0000 (16:14 -0400)
Measuring text is quite expensive, so only do this if really necessary.

gtk/gtklabel.c

index 1e9f56634647b1347e0f6642299085590dd44211..378069d8a5ab97955d5fcf483e8b724c0f4febd9 100644 (file)
@@ -2782,7 +2782,6 @@ gtk_label_get_measuring_layout (GtkLabel    *self,
                                 PangoLayout *existing_layout,
                                 int          width)
 {
-  PangoRectangle rect;
   PangoLayout *copy;
 
   if (existing_layout != NULL)
@@ -2820,13 +2819,17 @@ gtk_label_get_measuring_layout (GtkLabel    *self,
    * can just return the current layout, because for measuring purposes, it will be
    * identical.
    */
-  pango_layout_get_extents (self->layout, NULL, &rect);
-  if ((width == -1 || rect.width <= width) &&
-      !pango_layout_is_wrapped (self->layout) &&
+  if (!pango_layout_is_wrapped (self->layout) &&
       !pango_layout_is_ellipsized (self->layout))
     {
-      g_object_ref (self->layout);
-      return self->layout;
+      PangoRectangle rect;
+
+      if (width == -1)
+        return g_object_ref (self->layout);
+
+      pango_layout_get_extents (self->layout, NULL, &rect);
+      if (rect.width <= width)
+        return g_object_ref (self->layout);
     }
 
   copy = pango_layout_copy (self->layout);